7
תגובות

MySQLi בכל הModels

פתח yotamN ,
אחרי זמן מה שהשתמשתי בFramework Codeigniter עבור ה MVC החלטתי לבנות אחד בעצמי על פי המדריך של PHPacademy אבל נתקלתי בבעיה, איך אני יכול לעשות שבכל הClassים של ה Models יהיה MySQLi?
חשבתי על לעשות Extends לClass אבל אני לא יודע אם זאת הדרך הנכונה אז אשמח אם תגידו לי מהי הדרך הנכונה

7 תשובות

avatar ענה intval ב 12 לאוגוסט 2014 #

אמנם אני ממש לא תומך בגישה כזו, אבל זה בדיוק הכיוון ואיך שזה עובד ב CI.
טכנית, יש מחלקה אחת אבסטרקטית שאתה יורש. המחלקה העליונה בעת היצירה שלה (או בהפעלה של המתודה load ב ci) מכניסה לתוך מאפיין את המופע של מחלקת mysqli שהיא לוקחת מאיפשהו. למשל מאוסף אובייקטים גלובאלי כלשהו.

abstract class BaseModel
{
  protected $db;
  public function __construct()
  {
    $this->db = CI::someGlobalStorage->getDb();
  }
}

class MyModel extends BaseModel
{
 
}

avatar ענה yotamN ב 12 לאוגוסט 2014 #

@intval נראה לי אני פשוט יעשה ככה:

class MyModel {
private $db = new mysqli();
}


עריכה:
זה עושה לי שגיאה הקוד הזה כשאני עושה לו Lint

avatar ענה Splash ב 12 לאוגוסט 2014 #

במקרה כזה אתה תיצור לכל אובייקט חיבור למסד ואז במקום שיהיה חיבור אחד יווצרו לך 9-10 חיבורים מה שסתם יאט את המערכת

avatar ענה yotamN ב 12 לאוגוסט 2014 #

@Splash אז לעשות Construct שמקבל ערך של mysqli?

avatar ענה Splash ב 12 לאוגוסט 2014 #

אני חושב שמה שאלכס הציע לך יותר מתאים מאשר להעביר לבנאי כל פעם את האוביקט של המסד.
יש לך פחות סיכוי לטעות פשוט במקרה הזה ויותר קל לעלות על הטעות כאשר מדובר על פונקציה אחת ולא באלפי קבצים שצריך לחקור.

avatar ענה yotamN ב 12 לאוגוסט 2014 #

@Splash עשיתי ככה:

abstract class Model
  {
    protected $db;
    public function __construct()
    {
      $this->$db = new mysqli('localhost','root','464546gtgfgh','help');
    }
  }


וזה פשוט לא עובד... אני יגיד את האמת לא יודע מה זה abstract :(

avatar ענה Splash ב 12 לאוגוסט 2014 #

זה בעיה שאתה לא יודע מה זה מחלקה אבסטרקטית אבל רוצה לעבוד עם התבנית MVC זה קצת לא אפשרי,קודם תלמד OOP כמו שצריך ורק אחר כך תנסה לכתוב תכנית שמבוססת על מה שלמדת.

בנוגע לזה שזה לא עובד תראה את הקוד המלא אנחנו לא יכולים לנחש איך מימשת את ההמשך.